package org.wanho;

import java.util.Optional;

/**
 * Author：汤小洋
 * Date：2023-05-09 10:22
 * Description：<描述>
 */
public class Test10_Optional类型 {
    public static void main(String[] args) {
        /**
         * 创建Optional对象
         */
        Integer n1 = null;
        Integer n2 = 10;
        // of方法，如果参数为null,会抛出空指针异常
        Optional<Integer> a = Optional.of(n2);
        // ofNullable方法，可以保存null值
        Optional<Integer> b = Optional.ofNullable(n1);
        // empty方法，创建一个保存null值的Optional对象
        Optional<Object> c = Optional.empty();
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println("---------------------------------------");

        /**
         * 常用方法
         */
        // isPresent方法，判断其内部是否存在值（非null）
        System.out.println(a.isPresent()); // 存储值，返回true
        System.out.println(b.isPresent()); // 值为null，返回false

        // get方法，获取其存储的值,如果值为null,则会抛出异常
        System.out.println(a.get());
        // orElse方法，如果值存在，则返回值；如果值为null，则返回指定的默认值
        System.out.println(b.orElse(0));
        System.out.println("---------------------------------------");

        // map方法，映射，对数据进行处理
        Optional<String> map = a.map(n -> Integer.toBinaryString(n)); // 转换为二进制的字符串
        System.out.println(map);

        // filter方法，过滤，如果断言为true，则返回原来的值，否则返回一个空的optional，主要用于值的判断
        Optional<Integer> filter = b.filter(n -> n % 2 == 0);
        System.out.println(filter);


    }
}
